package cron.core.scheduler.trigger;


import cron.core.scheduler.timer.TimeWheel;

import java.util.Date;

/**
 * @author : willian fu
 * @version : 1.0
 * @date : 2021/3/5 0005 17:47
 */
public interface Trigger extends Runnable{

    /**
     * 获取下一次的执行时间;
     * @return 下次执行时间点
     */
    Date getNextTime();

    /**
     * 判断该触发器是否应该被触发
     * @param count 当前计数轮
     * @return 触发状态
     */
    boolean isBeTrigger(long count);

    /**
     * 设置触发周期
     * @param count 第几个周期触发
     */
    void setCount(long count);

    /**
     * 设置时间轮
     * @param timeWheel 时间轮
     */
    void setTimeWheel(TimeWheel timeWheel);

    /**
     * 更新下一次执行计划
     */
    void toNext();

    /**
     * 允许调度任务
     */
    void enable();

    /**
     * 禁止调度任务
     */
    void disable();

    /**
     * 判断任务是否允许调度
     * @return
     */
    boolean isEnable();

    /**
     * 更新调度计划
     * @param rule 规则
     */
    void updateRule(Object rule);
}
